#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QPaintEvent>
#include <QMouseEvent>
#include <QObject>
#include <vector>
#include "ball.h"
#include<QLabel>
#include<QSound>
#include<QTimer>
class MainWindow : public QMainWindow
{
    Q_OBJECT
private:

    int status;   //用来记录游戏进行的状态  0为未开始  1为开始  2为物块下落
    QPoint mouse;   //记录鼠标坐标
    Ball unfallingBall;  //未下落且跟着鼠标走的球
    std::vector <Ball> balls;   //存放场上所有的球
    QPushButton *Start;  //开始按钮
    QPushButton *Rank;  //积分榜按钮
    QPushButton *Exit;  //退出按钮
    QPushButton *Back;  //返回按钮
    QPushButton *Pause;  //暂停按钮
    QPushButton *Finish;  //结束按钮
    QPushButton *Win;
    QLabel *q;

    void setbutton(QPushButton *,int width,int height,int x,int y,QString);  //初始化按钮格式1
    void Setbutton(QPushButton *,int width,int height,int x,int y,int a);  //初始化按钮格式2
    void iniUI();       //初始化界面
    void iniSignals();  //信号连接
    void nextBall();    //下一个球初始化
    void movecoordinate();  //根据球当前的速度与碰撞状态改变所有球的坐标
    void collideWall(int i);    //判断是否撞墙并改变速度方向
    void collision();       //判断所有球两两之间是否相撞并改变速度的大小和方向
    void combine(int i,int j);

    void onRestart();


private slots:
    void showbuttons(bool);     //控制初始界面按钮的显示
    void StartGame();       //开始游戏
    void showscore();       //显示积分
    void back();        //返回到主界面
    void gamepause();   //游戏暂停
    void gamefinish();      //游戏结束
    void gamewin();
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
    void paintEvent(QPaintEvent *event);    //重载绘图事件
    void mouseMoveEvent(QMouseEvent *event);    //重载鼠标移动事件
    void mousePressEvent(QMouseEvent *event);    //重载点击事件
    void timerEvent(QTimerEvent *event);    //重载计时器事件
};

#endif // MAINWINDOW_H
